Métodos de Predictivos (Clasificación o Aprendizaje-Supervisado)
Se necesita cargar las siguientes librerías
Muestra la distribución de la variable a predecir
equilibrio.variable.predecir<-function(datos,variable.predecir,ylab="Cantidad de individuos",xlab = "",
main=paste("Distribución de la variable",variable.predecir),
col = NA) {
gg_color <- function (n) {
hues <- seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
if(missing(variable.predecir) | !(variable.predecir %in% colnames(datos))){
stop("variable.predecir tiene que ser ingresada y ser un nombre de columna", call. = FALSE )
}
if(is.character(datos[,variable.predecir]) | is.factor(datos[,variable.predecir])){
if(length(col) == 0 || is.na(col)){
col <- gg_color(length(unique(datos[,variable.predecir])))
}else{
col <- rep(col,length(unique(datos[,variable.predecir])))
}
ggplot(data = datos, mapping = aes_string(x = variable.predecir, fill = variable.predecir)) +
geom_bar() +
scale_fill_manual(values = col, name = variable.predecir) +
labs(x = xlab, y = ylab, title = main) +
theme_minimal() +
theme(legend.position = "bottom")
}else{
stop("La variable a predecir tienen que ser de tipo factor o character", call. = FALSE )
}
}Muestra la distribución de una variable numérica según la variable a predecir
poder.predictivo.numerica<-function(datos,variable.predecir,variable.comparar,ylab="",xlab="",
main=paste("Densidad de la variable",variable.comparar,'según',variable.predecir),
col=NA){
gg_color <- function (n) {
hues <- seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
if(missing(variable.predecir) | !(variable.predecir %in% colnames(datos))){
stop("variable.predecir tiene que ser ingresada y ser un nombre de columna", call. = FALSE )
}
if(missing(variable.comparar) | !(variable.comparar %in% colnames(datos)) | !is.numeric(datos[,variable.comparar])){
stop("variable.comparar tiene que ser ingresada y ser un nombre de columna numérica", call. = FALSE )
}
if(is.character(datos[,variable.predecir]) | is.factor(datos[,variable.predecir])){
if(length(col) == 0 || is.na(col)){
col <- gg_color(length(unique(datos[,variable.predecir])))
}else{
col <- rep(col,length(unique(datos[,variable.predecir])))
}
ggplot(data = datos, aes_string(variable.comparar, fill = variable.predecir)) +
geom_density(alpha = .7, color = NA) +
scale_fill_manual(values = col) +
labs(title = main , y = ylab, x = xlab ,fill = variable.predecir) +
theme_minimal() +
theme(legend.position = 'bottom',
legend.title = element_blank(),
text = element_text(size = 15))
}else{
stop("La variable a predecir tienen que ser de tipo factor o character", call. = FALSE )
}
}Muestra la distribución de una variable categórica según la variable a predecir
poder.predictivo.categorica<-function(datos,variable.predecir,variable.comparar,ylab="",xlab="",
main=paste("Densidad de la variable",variable.comparar,'según',variable.predecir),
col=NA){
gg_color <- function (n) {
hues <- seq(15, 375, length = n + 1)
hcl(h = hues, l = 65, c = 100)[1:n]
}
if(missing(variable.predecir) | !(variable.predecir %in% colnames(datos))){
stop("variable.predecir tiene que ser ingresada y ser un nombre de columna", call. = FALSE )
}
if(missing(variable.comparar) | !(variable.comparar %in% colnames(datos)) |
!(is.factor(datos[,variable.comparar]) | is.character(datos[,variable.comparar])) ){
stop("variable.comparar tiene que ser ingresada y ser un nombre de columna categórica", call. = FALSE )
}
if(is.character(datos[,variable.predecir]) | is.factor(datos[,variable.predecir])){
if(length(col) == 0 || is.na(col)){
col <- gg_color(length(unique(datos[,variable.predecir])))
}else{
col <- rep(col,length(unique(datos[,variable.predecir])))
}
datos2 <- datos %>%
dplyr::group_by_(variable.comparar, variable.predecir) %>%
dplyr::summarise(count = n())
if(variable.comparar != variable.predecir){
datos2 <- datos2 %>% dplyr::group_by_(variable.comparar)
}
datos2 <- datos2 %>% dplyr::mutate(prop = round(count/sum(count),4))
ggplot(data = datos2, mapping = aes_string(x = variable.comparar, y = "prop", fill = variable.predecir)) +
geom_col(position = "fill") +
geom_text(aes(label = glue("{percent(prop)} ({count})")), position = position_stack(vjust = .5), color = "white") +
scale_y_continuous(label = percent) +
labs(y = xlab, x = ylab, title = main) +
scale_fill_manual(values = col, name = variable.predecir) +
theme(legend.position = "bottom")+
coord_flip()
}else{
stop("La variable a predecir tienen que ser de tipo factor o character", call. = FALSE )
}
}Índices para matrices NxN
indices.general <- function(MC) {
precision.global <- sum(diag(MC))/sum(MC)
error.global <- 1 - precision.global
precision.categoria <- diag(MC)/rowSums(MC)
res <- list(matriz.confusion = MC, precision.global = precision.global, error.global = error.global,
precision.categoria = precision.categoria)
names(res) <- c("Matriz de Confusión", "Precisión Global", "Error Global",
"Precisión por categoría")
return(res)
}'data.frame': 150 obs. of 5 variables:
$ s.largo: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ s.ancho: num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ p.largo: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ p.ancho: num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ tipo : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
Vamos a generar al azar una tabla de testing de tamaño 50 y una tabla de aprendizaje de tamaño 100.
Se cargan las librerías
Se genera el modelo
Es importante tomar en cuenta los siguientes parámetros:
size = número de de nodos en la capa oculta.rang = pesos iniciales.decay = grado de decrecimiento de los pesos.maxit = número máximo de iteraciones (default=100).MaxNWts = número máximo de pesos (default=1000).modelo<-nnet(tipo~.,data = taprendizaje, size = 4, rang = 0.1,
decay = 5e-4, maxit = 200, MaxNWts = 500, trace = FALSE)
modeloa 4-4-3 network with 35 weights
inputs: s.largo s.ancho p.largo p.ancho
output(s): tipo
options were - softmax modelling decay=5e-04
Se genera la predicción
# Type="class" hace que el modelo prediga clases y no probabilidades
prediccion <- predict(modelo, ttesting, type ='class')
prediccion [1] "setosa" "versicolor" "setosa" "virginica" "setosa"
[6] "setosa" "versicolor" "setosa" "setosa" "virginica"
[11] "virginica" "virginica" "versicolor" "virginica" "setosa"
[16] "setosa" "virginica" "setosa" "virginica" "setosa"
[21] "versicolor" "versicolor" "setosa" "setosa" "versicolor"
[26] "setosa" "virginica" "setosa" "virginica" "virginica"
[31] "versicolor" "setosa" "versicolor" "virginica" "setosa"
[36] "virginica" "versicolor" "setosa" "virginica" "setosa"
[41] "versicolor" "versicolor" "versicolor" "versicolor" "virginica"
[46] "virginica" "versicolor" "versicolor" "versicolor" "virginica"
Se genera la matriz de confusión
prediccion
setosa versicolor virginica
setosa 18 0 0
versicolor 0 16 2
virginica 0 0 14
Índices de calidad de la predicción
$`Matriz de Confusión`
prediccion
setosa versicolor virginica
setosa 18 0 0
versicolor 0 16 2
virginica 0 0 14
$`Precisión Global`
[1] 0.96
$`Error Global`
[1] 0.04
$`Precisión por categoría`
setosa versicolor virginica
1.0000000 0.8888889 1.0000000
Se cargan las librerías
Se genera el modelo
modelo <- train.nnet(tipo~.,data = taprendizaje, size = 4, rang = 0.1,
decay = 5e-4, maxit = 200, MaxNWts = 500, trace = FALSE)
modeloa 4-4-3 network with 35 weights
inputs: s.largo s.ancho p.largo p.ancho
output(s): tipo
options were - softmax modelling decay=5e-04
Se genera la predicción
[1] setosa versicolor setosa virginica setosa setosa
[7] versicolor setosa setosa virginica virginica virginica
[13] versicolor virginica setosa setosa virginica setosa
[19] virginica setosa versicolor versicolor setosa setosa
[25] versicolor setosa virginica setosa virginica virginica
[31] versicolor setosa versicolor virginica setosa virginica
[37] versicolor setosa virginica setosa versicolor versicolor
[43] versicolor versicolor virginica virginica versicolor versicolor
[49] versicolor virginica
Levels: setosa versicolor virginica
Se genera la matriz de confusión
prediction
real setosa versicolor virginica
setosa 18 0 0
versicolor 0 16 2
virginica 0 0 14
Índices de calidad de la predicción
Confusion Matrix:
prediction
real setosa versicolor virginica
setosa 18 0 0
versicolor 0 16 2
virginica 0 0 14
Overall Accuracy: 0.9600
Overall Error: 0.0400
Category Accuracy:
setosa versicolor virginica
1.000000 0.888889 1.000000
Podemos omitir crear la matriz de confusión
Confusion Matrix:
prediction
real setosa versicolor virginica
setosa 18 0 0
versicolor 0 16 2
virginica 0 0 14
Overall Accuracy: 0.9600
Overall Error: 0.0400
Category Accuracy:
setosa versicolor virginica
1.000000 0.888889 1.000000
Utilizando los datos que previamente cargamos
Podemos visualizar la distribución de las variables numéricas según la variable a predecir.
Utilizando los mismo datos para prueba (ttesting) y aprendizaje (taprendizaje) que creamos anteriormente.
Se cargan las librerías
Se genera el modelo
modelo <- nnet(tipo~p.largo+p.ancho, data = taprendizaje, size = 4, rang = 0.1,
decay = 5e-4, maxit = 200, MaxNWts = 500, trace = FALSE)
modeloa 2-4-3 network with 27 weights
inputs: p.largo p.ancho
output(s): tipo
options were - softmax modelling decay=5e-04
Se genera la predicción
# Type="class" hace que el modelo prediga clases y no probabilidades
prediccion <- predict(modelo, ttesting, type ='class')
prediccion [1] "setosa" "versicolor" "setosa" "virginica" "setosa"
[6] "setosa" "versicolor" "setosa" "setosa" "virginica"
[11] "virginica" "versicolor" "versicolor" "virginica" "setosa"
[16] "setosa" "virginica" "setosa" "virginica" "setosa"
[21] "versicolor" "versicolor" "setosa" "setosa" "versicolor"
[26] "setosa" "virginica" "setosa" "virginica" "virginica"
[31] "versicolor" "setosa" "versicolor" "virginica" "setosa"
[36] "virginica" "versicolor" "setosa" "virginica" "setosa"
[41] "versicolor" "versicolor" "versicolor" "versicolor" "versicolor"
[46] "virginica" "versicolor" "versicolor" "versicolor" "virginica"
Se genera la matriz de confusión
prediccion
setosa versicolor virginica
setosa 18 0 0
versicolor 0 17 1
virginica 0 1 13
Índices de calidad de la predicción
$`Matriz de Confusión`
prediccion
setosa versicolor virginica
setosa 18 0 0
versicolor 0 17 1
virginica 0 1 13
$`Precisión Global`
[1] 0.96
$`Error Global`
[1] 0.04
$`Precisión por categoría`
setosa versicolor virginica
1.0000000 0.9444444 0.9285714
Se cargan las librerías
Se genera el modelo
modelo <- train.nnet(tipo~p.largo+p.ancho, data = taprendizaje, size = 4, rang = 0.1,
decay = 5e-4, maxit = 200, MaxNWts = 500, trace = FALSE)
modeloa 2-4-3 network with 27 weights
inputs: p.largo p.ancho
output(s): tipo
options were - softmax modelling decay=5e-04
Se genera la predicción
[1] setosa versicolor setosa virginica setosa setosa
[7] versicolor setosa setosa virginica virginica versicolor
[13] versicolor virginica setosa setosa virginica setosa
[19] virginica setosa versicolor versicolor setosa setosa
[25] versicolor setosa virginica setosa virginica virginica
[31] versicolor setosa versicolor virginica setosa virginica
[37] versicolor setosa virginica setosa versicolor versicolor
[43] versicolor versicolor versicolor virginica versicolor versicolor
[49] versicolor virginica
Levels: setosa versicolor virginica
Se genera la matriz de confusión
prediction
real setosa versicolor virginica
setosa 18 0 0
versicolor 0 17 1
virginica 0 1 13
Índices de calidad de la predicción
Confusion Matrix:
prediction
real setosa versicolor virginica
setosa 18 0 0
versicolor 0 17 1
virginica 0 1 13
Overall Accuracy: 0.9600
Overall Error: 0.0400
Category Accuracy:
setosa versicolor virginica
1.000000 0.944444 0.928571
Podemos omitir crear la matriz de confusión
Confusion Matrix:
prediction
real setosa versicolor virginica
setosa 18 0 0
versicolor 0 17 1
virginica 0 1 13
Overall Accuracy: 0.9600
Overall Error: 0.0400
Category Accuracy:
setosa versicolor virginica
1.000000 0.944444 0.928571
setwd("~/Desktop/Datos/")
datos<-read.csv("MuestraCredito5000V2.csv",sep = ";",header=T)
# Recodifica las variables como categóricas ordinales
datos$IngresoNeto <- factor(datos$IngresoNeto, ordered = TRUE)
datos$CoefCreditoAvaluo <- factor(datos$CoefCreditoAvaluo, ordered = TRUE)'data.frame': 5000 obs. of 6 variables:
$ MontoCredito : int 14327 111404 21128 15426 10351 27060 243369 16300 18319 107037 ...
$ IngresoNeto : Ord.factor w/ 2 levels "1"<"2": 1 1 1 2 1 1 1 2 2 2 ...
$ CoefCreditoAvaluo: Ord.factor w/ 12 levels "1"<"2"<"3"<"4"<..: 1 1 1 1 1 1 1 1 1 1 ...
$ MontoCuota : Factor w/ 4 levels "Alto","Bajo",..: 4 4 4 4 4 4 4 4 4 4 ...
$ GradoAcademico : Factor w/ 2 levels "Bachiller","Licenciatura": 1 1 1 1 1 1 1 1 1 1 ...
$ BuenPagador : Factor w/ 2 levels "No","Si": 2 2 2 2 2 2 2 2 2 2 ...
Vamos a generar al azar una tabla de testing con 15% de los datos y una tabla de aprendizaje con 85%
Se cargan las librerías
Se genera el modelo
# Importante size=250, con size=4 la predicción sería muy mala
modelo <- nnet(BuenPagador~., data = taprendizaje, size = 200, MaxNWts = 5000, rang = 0.1,
decay = 5e-4, maxit = 200, trace = FALSE)
modeloa 17-200-1 network with 3801 weights
inputs: MontoCredito IngresoNeto.L CoefCreditoAvaluo.L CoefCreditoAvaluo.Q CoefCreditoAvaluo.C CoefCreditoAvaluo^4 CoefCreditoAvaluo^5 CoefCreditoAvaluo^6 CoefCreditoAvaluo^7 CoefCreditoAvaluo^8 CoefCreditoAvaluo^9 CoefCreditoAvaluo^10 CoefCreditoAvaluo^11 MontoCuotaBajo MontoCuotaMedio MontoCuotaMuyBajo GradoAcademicoLicenciatura
output(s): BuenPagador
options were - entropy fitting decay=5e-04
Se genera la predicción
# Type="class" hace que el modelo prediga clases y no probabilidades
prediccion <- predict(modelo, ttesting, type ='class')
prediccion [1] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[15] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[29] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[43] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[57] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[71] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[85] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[99] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[113] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[127] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[141] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[155] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[169] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[183] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[197] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[211] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[225] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[239] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[253] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[267] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[281] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[295] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[309] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[323] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[337] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[351] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[365] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[379] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[393] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[407] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[421] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[435] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[449] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[463] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[477] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[491] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[505] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[519] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[533] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[547] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[561] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[575] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[589] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[603] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[617] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[631] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[645] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[659] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[673] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[687] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[701] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[715] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[729] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[743] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
Se genera la matriz de confusión
prediccion
Si
No 93
Si 657
Índices de calidad de la predicción
$`Matriz de Confusión`
prediccion
Si
No 93
Si 657
$`Precisión Global`
[1] 0.124
$`Error Global`
[1] 0.876
$`Precisión por categoría`
No Si
1.0000000 0.1415525
Se cargan las librerías
Se genera el modelo
modelo <- train.nnet(BuenPagador~., data = taprendizaje, size = 200, MaxNWts = 5000, rang = 0.1,
decay = 5e-4, maxit = 200, trace = FALSE)
modeloa 17-200-1 network with 3801 weights
inputs: MontoCredito IngresoNeto.L CoefCreditoAvaluo.L CoefCreditoAvaluo.Q CoefCreditoAvaluo.C CoefCreditoAvaluo^4 CoefCreditoAvaluo^5 CoefCreditoAvaluo^6 CoefCreditoAvaluo^7 CoefCreditoAvaluo^8 CoefCreditoAvaluo^9 CoefCreditoAvaluo^10 CoefCreditoAvaluo^11 MontoCuotaBajo MontoCuotaMedio MontoCuotaMuyBajo GradoAcademicoLicenciatura
output(s): BuenPagador
options were - entropy fitting decay=5e-04
Se genera la predicción
[1] No Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[24] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si No Si Si Si Si No Si
[47] Si Si No Si Si No Si Si Si Si Si Si Si Si No Si Si Si Si Si Si Si Si
[70] Si Si Si No Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[93] No Si Si Si Si Si No Si Si Si Si Si Si Si Si Si Si Si No Si Si Si Si
[116] Si Si No Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si No Si Si Si
[139] Si Si Si Si Si Si Si Si No Si Si Si Si Si Si Si Si No Si Si Si Si Si
[162] Si Si Si Si Si Si Si Si No Si Si Si Si Si Si Si Si No Si Si Si No Si
[185] Si Si Si Si Si Si Si Si No Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[208] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[231] Si Si Si Si Si Si Si Si No No Si Si Si Si Si Si Si Si Si Si Si No Si
[254] Si Si Si Si Si Si Si Si Si Si Si Si Si No Si Si Si Si No Si Si Si Si
[277] Si Si Si Si Si Si Si Si Si No Si Si Si Si Si Si Si Si Si Si No Si Si
[300] Si Si Si Si No Si Si Si Si Si Si Si Si Si Si Si Si No Si No Si Si Si
[323] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[346] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[369] No Si Si Si No Si Si Si Si Si Si Si Si Si Si Si Si Si No No Si Si Si
[392] Si Si Si Si Si Si No Si Si Si Si Si Si Si No Si Si Si Si Si Si Si Si
[415] Si Si Si Si Si Si No Si Si Si Si Si Si Si Si Si No Si Si Si Si Si Si
[438] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si No Si Si Si Si No Si Si
[461] No Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si No Si Si Si Si
[484] No Si Si No No Si Si Si Si Si Si Si No Si No Si Si Si Si Si Si Si Si
[507] Si Si Si Si Si Si Si Si Si Si Si Si Si No Si Si Si No Si Si Si Si Si
[530] Si Si No Si No Si No Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[553] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[576] Si Si Si Si Si Si No No Si Si No Si No Si Si Si Si Si Si No Si Si Si
[599] Si Si Si Si No Si Si Si Si Si Si Si Si Si Si No Si Si Si Si Si Si Si
[622] Si No Si Si Si Si Si Si Si Si Si Si Si Si No Si Si Si Si Si No Si Si
[645] Si Si Si Si Si Si Si Si Si Si Si Si No No Si Si No Si Si No Si Si Si
[668] Si Si Si Si Si Si Si Si Si No Si Si Si Si Si Si Si Si Si Si Si Si Si
[691] Si Si Si Si Si Si Si Si Si Si Si No Si Si Si Si Si Si No Si Si Si Si
[714] Si Si Si Si Si Si Si Si Si Si Si Si No Si Si Si No Si No Si Si Si Si
[737] Si Si Si Si No Si Si Si Si Si Si No Si Si
Levels: No Si
Se genera la matriz de confusión
prediction
real No Si
No 60 33
Si 12 645
Índices de calidad de la predicción
Confusion Matrix:
prediction
real No Si
No 60 33
Si 12 645
Overall Accuracy: 0.9400
Overall Error: 0.0600
Category Accuracy:
No Si
0.645161 0.981735
Podemos omitir crear la matriz de confusión
Confusion Matrix:
prediction
real No Si
No 60 33
Si 12 645
Overall Accuracy: 0.9400
Overall Error: 0.0600
Category Accuracy:
No Si
0.645161 0.981735
Utilizando los datos que previamente cargamos
Podemos visualizar la distribución de las variables numéricas y categóricas según la variable a predecir.
Utilizando los mismo datos para prueba (ttesting) y aprendizaje (taprendizaje) que creamos anteriormente.
Se cargan las librerías
Se genera el modelo
# Importante size=250, con size=4 la predicción sería muy mala
modelo<-nnet(BuenPagador~CoefCreditoAvaluo+MontoCredito+IngresoNeto, data = taprendizaje, size = 200,
MaxNWts = 5000, rang = 0.1, decay = 5e-4, maxit = 200, trac = FALSE)
modeloa 13-200-1 network with 3001 weights
inputs: CoefCreditoAvaluo.L CoefCreditoAvaluo.Q CoefCreditoAvaluo.C CoefCreditoAvaluo^4 CoefCreditoAvaluo^5 CoefCreditoAvaluo^6 CoefCreditoAvaluo^7 CoefCreditoAvaluo^8 CoefCreditoAvaluo^9 CoefCreditoAvaluo^10 CoefCreditoAvaluo^11 MontoCredito IngresoNeto.L
output(s): BuenPagador
options were - entropy fitting decay=5e-04
Se genera la predicción
# Type="class" hace que el modelo prediga clases y no probabilidades
prediccion <- predict(modelo, ttesting, type ='class')
prediccion [1] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[15] "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si"
[29] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[43] "Si" "Si" "No" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[57] "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "No" "No" "Si" "No" "Si"
[71] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[85] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[99] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si"
[113] "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[127] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[141] "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[155] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[169] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[183] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[197] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[211] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[225] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[239] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[253] "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[267] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si"
[281] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[295] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si"
[309] "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No"
[323] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[337] "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[351] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[365] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[379] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[393] "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No"
[407] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si"
[421] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si"
[435] "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[449] "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[463] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[477] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[491] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[505] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[519] "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si"
[533] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[547] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[561] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[575] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si"
[589] "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[603] "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[617] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "No"
[631] "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[645] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si"
[659] "Si" "Si" "No" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[673] "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[687] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[701] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si"
[715] "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[729] "Si" "Si" "Si" "No" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
[743] "Si" "Si" "Si" "Si" "Si" "Si" "Si" "Si"
Se genera la matriz de confusión
prediccion
No Si
No 22 71
Si 16 641
Índices de calidad de la predicción
$`Matriz de Confusión`
prediccion
No Si
No 22 71
Si 16 641
$`Precisión Global`
[1] 0.884
$`Error Global`
[1] 0.116
$`Precisión por categoría`
No Si
0.2365591 0.9756469
Se cargan las librerías
Se genera el modelo
modelo <- train.nnet(BuenPagador~CoefCreditoAvaluo+MontoCredito+IngresoNeto, data = taprendizaje, size = 200,
MaxNWts = 5000, rang = 0.1, decay = 5e-4, maxit = 200, trac = FALSE)
modeloa 13-200-1 network with 3001 weights
inputs: CoefCreditoAvaluo.L CoefCreditoAvaluo.Q CoefCreditoAvaluo.C CoefCreditoAvaluo^4 CoefCreditoAvaluo^5 CoefCreditoAvaluo^6 CoefCreditoAvaluo^7 CoefCreditoAvaluo^8 CoefCreditoAvaluo^9 CoefCreditoAvaluo^10 CoefCreditoAvaluo^11 MontoCredito IngresoNeto.L
output(s): BuenPagador
options were - entropy fitting decay=5e-04
Se genera la predicción
[1] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[24] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[47] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[70] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[93] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[116] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[139] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[162] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[185] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[208] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[231] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[254] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[277] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[300] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[323] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[346] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[369] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[392] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[415] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[438] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[461] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[484] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[507] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[530] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[553] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[576] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[599] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[622] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[645] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[668] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[691] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[714] Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si Si
[737] Si Si Si Si Si Si Si Si Si Si Si Si Si Si
Levels: No Si
Se genera la matriz de confusión
prediction
real No Si
No 0 93
Si 0 657
Índices de calidad de la predicción
Confusion Matrix:
prediction
real No Si
No 0 93
Si 0 657
Overall Accuracy: 0.8760
Overall Error: 0.1240
Category Accuracy:
No Si
0.000000 1.000000
Podemos omitir crear la matriz de confusión
Confusion Matrix:
prediction
real No Si
No 0 93
Si 0 657
Overall Accuracy: 0.8760
Overall Error: 0.1240
Category Accuracy:
No Si
0.000000 1.000000
# Leyendo Datos
setwd("~/Desktop/Datos/")
datos<-read.csv("iris.csv",sep = ";",dec='.',header=T)
muestra <- sample(1:150,50)
taprendizaje <- datos[-muestra,]# Generando el modelo
modelo <- nnet(tipo~.,data=taprendizaje,size = 4, rang = 0.1,decay = 5e-4, maxit = 200,trace=FALSE)setwd("~/Desktop/Datos/")
datos<-read.csv("iris.csv",sep = ";",dec='.',header=T)
muestra <- sample(1:150,50)
ttesting <- datos[muestra,]# Automáticamente queda en la variable en la que fue guardada, o sea modelo
load("modelo_redes_iris.rda") # Type="class" hace que el modelo prediga clases y no valores de Regresión
prediccion <- predict(modelo, ttesting[,-5], type = "class")
prediccion [1] "virginica" "virginica" "virginica" "setosa" "versicolor"
[6] "setosa" "virginica" "versicolor" "versicolor" "setosa"
[11] "setosa" "virginica" "setosa" "virginica" "virginica"
[16] "versicolor" "versicolor" "setosa" "virginica" "versicolor"
[21] "virginica" "virginica" "virginica" "setosa" "versicolor"
[26] "setosa" "virginica" "versicolor" "versicolor" "versicolor"
[31] "setosa" "setosa" "virginica" "virginica" "setosa"
[36] "versicolor" "versicolor" "virginica" "versicolor" "versicolor"
[41] "virginica" "versicolor" "versicolor" "versicolor" "virginica"
[46] "versicolor" "virginica" "setosa" "versicolor" "setosa"
prediccion
setosa versicolor virginica
setosa 13 0 0
versicolor 0 17 1
virginica 0 2 17
$`Matriz de Confusión`
prediccion
setosa versicolor virginica
setosa 13 0 0
versicolor 0 17 1
virginica 0 2 17
$`Precisión Global`
[1] 0.94
$`Error Global`
[1] 0.06
$`Precisión por categoría`
setosa versicolor virginica
1.0000000 0.9444444 0.8947368